{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quantopian Alpha Factor Library"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook contains a mumber of alpha factor candidates that we can use as features in ML models on the Quantopian platform."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from time import time\n",
    "import talib\n",
    "import re\n",
    "from statsmodels.api import OLS\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from scipy.stats import spearmanr\n",
    "from sklearn.linear_model import LinearRegression, Ridge, RidgeCV, Lasso, LassoCV, LogisticRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "from quantopian.research import run_pipeline\n",
    "from quantopian.pipeline import Pipeline, factors, filters, classifiers\n",
    "from quantopian.pipeline.data.builtin import USEquityPricing\n",
    "from quantopian.pipeline.factors import (Latest, \n",
    "                                         Returns, \n",
    "                                         AverageDollarVolume, \n",
    "                                         SimpleMovingAverage,\n",
    "                                         EWMA,\n",
    "                                         BollingerBands,\n",
    "                                         CustomFactor,\n",
    "                                         MarketCap,\n",
    "                                        SimpleBeta)\n",
    "from quantopian.pipeline.filters import QTradableStocksUS, StaticAssets\n",
    "from quantopian.pipeline.data.quandl import fred_usdontd156n as libor\n",
    "from empyrical import max_drawdown, sortino_ratio\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Sources"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "################\n",
    "# Fundamentals #\n",
    "################\n",
    "\n",
    "# Morningstar fundamentals (2002 - Ongoing)\n",
    "# https://www.quantopian.com/help/fundamentals\n",
    "from quantopian.pipeline.data import Fundamentals\n",
    "\n",
    "#####################\n",
    "# Analyst Estimates #\n",
    "#####################\n",
    "\n",
    "# Earnings Surprises - Zacks (27 May 2006 - Ongoing)\n",
    "# https://www.quantopian.com/data/zacks/earnings_surprises\n",
    "from quantopian.pipeline.data.zacks import EarningsSurprises\n",
    "from quantopian.pipeline.factors.zacks import BusinessDaysSinceEarningsSurprisesAnnouncement\n",
    "\n",
    "##########\n",
    "# Events #\n",
    "##########\n",
    "\n",
    "# Buyback Announcements - EventVestor (01 Jun 2007 - Ongoing)\n",
    "# https://www.quantopian.com/data/eventvestor/buyback_auth\n",
    "from quantopian.pipeline.data.eventvestor import BuybackAuthorizations\n",
    "from quantopian.pipeline.factors.eventvestor import BusinessDaysSinceBuybackAuth\n",
    "\n",
    "# CEO Changes - EventVestor (01 Jan 2007 - Ongoing)\n",
    "# https://www.quantopian.com/data/eventvestor/ceo_change\n",
    "from quantopian.pipeline.data.eventvestor import CEOChangeAnnouncements\n",
    "\n",
    "# Dividends - EventVestor (01 Jan 2007 - Ongoing)\n",
    "# https://www.quantopian.com/data/eventvestor/dividends\n",
    "from quantopian.pipeline.data.eventvestor import (\n",
    "    DividendsByExDate,\n",
    "    DividendsByPayDate,\n",
    "    DividendsByAnnouncementDate,\n",
    ")\n",
    "from quantopian.pipeline.factors.eventvestor import (\n",
    "    BusinessDaysSincePreviousExDate,\n",
    "    BusinessDaysUntilNextExDate,\n",
    "    BusinessDaysSinceDividendAnnouncement,\n",
    ")\n",
    "\n",
    "# Earnings Calendar - EventVestor (01 Jan 2007 - Ongoing)\n",
    "# https://www.quantopian.com/data/eventvestor/earnings_calendar\n",
    "from quantopian.pipeline.data.eventvestor import EarningsCalendar\n",
    "from quantopian.pipeline.factors.eventvestor import (\n",
    "    BusinessDaysUntilNextEarnings,\n",
    "    BusinessDaysSincePreviousEarnings\n",
    ")\n",
    "\n",
    "# 13D Filings - EventVestor (01 Jan 2007 - Ongoing)\n",
    "# https://www.quantopian.com/data/eventvestor/_13d_filings\n",
    "from quantopian.pipeline.data.eventvestor import _13DFilings\n",
    "from quantopian.pipeline.factors.eventvestor import BusinessDaysSince13DFilingsDate\n",
    "\n",
    "#############\n",
    "# Sentiment #\n",
    "#############\n",
    "\n",
    "# News Sentiment - Sentdex Sentiment Analysis (15 Oct 2012 - Ongoing)\n",
    "# https://www.quantopian.com/data/sentdex/sentiment\n",
    "from quantopian.pipeline.data.sentdex import sentiment"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# trading days per period\n",
    "MONTH = 21\n",
    "YEAR = 12 * MONTH"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "START = '2014-01-01'\n",
    "END = '2015-12-31'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Universe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def Q100US():\n",
    "    return filters.make_us_equity_universe(\n",
    "        target_size=100,\n",
    "        rankby=factors.AverageDollarVolume(window_length=200),\n",
    "        mask=filters.default_us_equity_universe_mask(),\n",
    "        groupby=classifiers.fundamentals.Sector(),\n",
    "        max_group_weight=0.3,\n",
    "        smoothing_func=lambda f: f.downsample('month_start'),\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# UNIVERSE = StaticAssets(symbols(['MSFT', 'AAPL']))\n",
    "UNIVERSE = Q100US()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Helper Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class AnnualizedData(CustomFactor):\n",
    "    # Get the sum of the last 4 reported values\n",
    "    window_length = 260\n",
    "\n",
    "    def compute(self, today, assets, out, asof_date, values):\n",
    "        for asset in range(len(assets)):\n",
    "            # unique asof dates indicate availability of new figures\n",
    "            _, filing_dates = np.unique(asof_date[:, asset], return_index=True)\n",
    "            quarterly_values = values[filing_dates[-4:], asset]\n",
    "            # ignore annual windows with <4 quarterly data points\n",
    "            if len(~np.isnan(quarterly_values)) != 4:    \n",
    "                out[asset] = np.nan\n",
    "            else:\n",
    "                out[asset] = np.sum(quarterly_values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class AnnualAvg(CustomFactor):\n",
    "    window_length = 252\n",
    "    \n",
    "    def compute(self, today, assets, out, values):\n",
    "        out[:] = (values[0] + values[-1])/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def factor_pipeline(factors):\n",
    "    start = time()\n",
    "    pipe = Pipeline({k: v(mask=UNIVERSE).rank() for k, v in factors.items()},\n",
    "                    screen=UNIVERSE)\n",
    "    result = run_pipeline(pipe, start_date=START, end_date=END)\n",
    "    return result, time() - start"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Alpha Factors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Value Factors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ValueFactors:\n",
    "    \"\"\"Definitions of factors for cross-sectional trading algorithms\"\"\"\n",
    "    \n",
    "    @staticmethod\n",
    "    def PriceToSalesTTM(**kwargs):\n",
    "        \"\"\"Last closing price divided by sales per share\"\"\"        \n",
    "        return Fundamentals.ps_ratio.latest\n",
    "\n",
    "    @staticmethod\n",
    "    def PriceToEarningsTTM(**kwargs):\n",
    "        \"\"\"Closing price divided by earnings per share (EPS)\"\"\"\n",
    "        return Fundamentals.pe_ratio.latest\n",
    " \n",
    "    @staticmethod\n",
    "    def PriceToDilutedEarningsTTM(mask):\n",
    "        \"\"\"Closing price divided by diluted EPS\"\"\"\n",
    "        last_close = USEquityPricing.close.latest\n",
    "        diluted_eps = AnnualizedData(inputs = [Fundamentals.diluted_eps_earnings_reports_asof_date,\n",
    "                                               Fundamentals.diluted_eps_earnings_reports],\n",
    "                                     mask=mask)\n",
    "        return last_close / diluted_eps\n",
    "\n",
    "    @staticmethod\n",
    "    def PriceToForwardEarnings(**kwargs):\n",
    "        \"\"\"Price to Forward Earnings\"\"\"\n",
    "        return Fundamentals.forward_pe_ratio.latest\n",
    "    \n",
    "    @staticmethod\n",
    "    def DividendYield(**kwargs):\n",
    "        \"\"\"Dividends per share divided by closing price\"\"\"\n",
    "        return Fundamentals.trailing_dividend_yield.latest\n",
    "\n",
    "    @staticmethod\n",
    "    def PriceToFCF(mask):\n",
    "        \"\"\"Price to Free Cash Flow\"\"\"\n",
    "        last_close = USEquityPricing.close.latest\n",
    "        fcf_share = AnnualizedData(inputs = [Fundamentals.fcf_per_share_asof_date,\n",
    "                                             Fundamentals.fcf_per_share],\n",
    "                                   mask=mask)\n",
    "        return last_close / fcf_share\n",
    "\n",
    "    @staticmethod\n",
    "    def PriceToOperatingCashflow(mask):\n",
    "        \"\"\"Last Close divided by Operating Cash Flows\"\"\"\n",
    "        last_close = USEquityPricing.close.latest\n",
    "        cfo_per_share = AnnualizedData(inputs = [Fundamentals.cfo_per_share_asof_date,\n",
    "                                                 Fundamentals.cfo_per_share],\n",
    "                                       mask=mask)        \n",
    "        return last_close / cfo_per_share\n",
    "\n",
    "    @staticmethod\n",
    "    def PriceToBook(mask):\n",
    "        \"\"\"Closing price divided by book value\"\"\"\n",
    "        last_close = USEquityPricing.close.latest\n",
    "        book_value_per_share = AnnualizedData(inputs = [Fundamentals.book_value_per_share_asof_date,\n",
    "                                              Fundamentals.book_value_per_share],\n",
    "                                             mask=mask)        \n",
    "        return last_close / book_value_per_share\n",
    "\n",
    "\n",
    "    @staticmethod\n",
    "    def EVToFCF(mask):\n",
    "        \"\"\"Enterprise Value divided by Free Cash Flows\"\"\"\n",
    "        fcf = AnnualizedData(inputs = [Fundamentals.free_cash_flow_asof_date,\n",
    "                                       Fundamentals.free_cash_flow],\n",
    "                             mask=mask)\n",
    "        return Fundamentals.enterprise_value.latest / fcf\n",
    "\n",
    "    @staticmethod\n",
    "    def EVToEBITDA(mask):\n",
    "        \"\"\"Enterprise Value to Earnings Before Interest, Taxes, Deprecation and Amortization (EBITDA)\"\"\"\n",
    "        ebitda = AnnualizedData(inputs = [Fundamentals.ebitda_asof_date,\n",
    "                                          Fundamentals.ebitda],\n",
    "                                mask=mask)\n",
    "\n",
    "        return Fundamentals.enterprise_value.latest / ebitda\n",
    "\n",
    "    @staticmethod\n",
    "    def EBITDAYield(mask):\n",
    "        \"\"\"EBITDA divided by latest close\"\"\"\n",
    "        ebitda = AnnualizedData(inputs = [Fundamentals.ebitda_asof_date,\n",
    "                                          Fundamentals.ebitda],\n",
    "                                mask=mask)\n",
    "        return USEquityPricing.close.latest / ebitda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "VALUE_FACTORS = {\n",
    "    'DividendYield'            : ValueFactors.DividendYield,\n",
    "    'EBITDAYield'              : ValueFactors.EBITDAYield,\n",
    "    'EVToEBITDA'               : ValueFactors.EVToEBITDA,\n",
    "    'EVToFCF'                  : ValueFactors.EVToFCF,\n",
    "    'PriceToBook'              : ValueFactors.PriceToBook,\n",
    "    'PriceToDilutedEarningsTTM': ValueFactors.PriceToDilutedEarningsTTM,\n",
    "    'PriceToEarningsTTM'       : ValueFactors.PriceToEarningsTTM,\n",
    "    'PriceToFCF'               : ValueFactors.PriceToFCF,\n",
    "    'PriceToForwardEarnings'   : ValueFactors.PriceToForwardEarnings,\n",
    "    'PriceToOperatingCashflow' : ValueFactors.PriceToOperatingCashflow,\n",
    "    'PriceToSalesTTM'          : ValueFactors.PriceToSalesTTM,\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python2.7/dist-packages/numpy/lib/arraysetops.py:200: FutureWarning: In the future, NAT != NAT will be True rather than False.\n",
      "  flag = np.concatenate(([True], aux[1:] != aux[:-1]))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 91.12 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 11 columns):\n",
      "DividendYield                40772 non-null float64\n",
      "EBITDAYield                  49823 non-null float64\n",
      "EVToEBITDA                   49823 non-null float64\n",
      "EVToFCF                      46400 non-null float64\n",
      "PriceToBook                  50343 non-null float64\n",
      "PriceToDilutedEarningsTTM    50215 non-null float64\n",
      "PriceToEarningsTTM           48956 non-null float64\n",
      "PriceToFCF                   49133 non-null float64\n",
      "PriceToForwardEarnings       39607 non-null float64\n",
      "PriceToOperatingCashflow     50343 non-null float64\n",
      "PriceToSalesTTM              50362 non-null float64\n",
      "dtypes: float64(11)\n",
      "memory usage: 4.6+ MB\n"
     ]
    }
   ],
   "source": [
    "value_result, t = factor_pipeline(VALUE_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "value_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Momentum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "class MomentumFactors:\n",
    "    \"\"\"Custom Momentum Factors\"\"\"\n",
    "    class PercentAboveLow(CustomFactor):\n",
    "        \"\"\"Percentage of current close above low \n",
    "        in lookback window of window_length days\n",
    "        \"\"\"\n",
    "        inputs = [USEquityPricing.close]\n",
    "        window_length = 252\n",
    "\n",
    "        def compute(self, today, assets, out, close):\n",
    "            out[:] = close[-1] / np.min(close, axis=0) - 1\n",
    "\n",
    "    class PercentBelowHigh(CustomFactor):\n",
    "        \"\"\"Percentage of current close below high \n",
    "        in lookback window of window_length days\n",
    "        \"\"\"\n",
    "        \n",
    "        inputs = [USEquityPricing.close]\n",
    "        window_length = 252\n",
    "            \n",
    "        def compute(self, today, assets, out, close):\n",
    "            out[:] = close[-1] / np.max(close, axis=0) - 1\n",
    "\n",
    "    @staticmethod\n",
    "    def make_dx(timeperiod=14):\n",
    "        class DX(CustomFactor):\n",
    "            \"\"\"Directional Movement Index\"\"\"\n",
    "            inputs = [USEquityPricing.high, \n",
    "                      USEquityPricing.low, \n",
    "                      USEquityPricing.close]\n",
    "            window_length = timeperiod + 1\n",
    "            \n",
    "            def compute(self, today, assets, out, high, low, close):\n",
    "                out[:] = [talib.DX(high[:, i], \n",
    "                                   low[:, i], \n",
    "                                   close[:, i], \n",
    "                                   timeperiod=timeperiod)[-1] \n",
    "                          for i in range(len(assets))]\n",
    "        return DX  \n",
    "\n",
    "    @staticmethod\n",
    "    def make_mfi(timeperiod=14):\n",
    "        class MFI(CustomFactor):\n",
    "            \"\"\"Money Flow Index\"\"\"\n",
    "            inputs = [USEquityPricing.high, \n",
    "                      USEquityPricing.low, \n",
    "                      USEquityPricing.close,\n",
    "                      USEquityPricing.volume]\n",
    "            window_length = timeperiod + 1\n",
    "            \n",
    "            def compute(self, today, assets, out, high, low, close, vol):\n",
    "                out[:] = [talib.MFI(high[:, i], \n",
    "                                    low[:, i], \n",
    "                                    close[:, i],\n",
    "                                    vol[:, i],\n",
    "                                    timeperiod=timeperiod)[-1] \n",
    "                          for i in range(len(assets))]\n",
    "        return MFI           \n",
    "\n",
    "    @staticmethod\n",
    "    def make_oscillator(fastperiod=12, slowperiod=26, matype=0):\n",
    "        class PPO(CustomFactor):\n",
    "            \"\"\"12/26-Day Percent Price Oscillator\"\"\"\n",
    "            inputs = [USEquityPricing.close]\n",
    "            window_length = slowperiod\n",
    "\n",
    "            def compute(self, today, assets, out, close_prices):\n",
    "                out[:] = [talib.PPO(close,\n",
    "                                    fastperiod=fastperiod,\n",
    "                                    slowperiod=slowperiod, \n",
    "                                    matype=matype)[-1]\n",
    "                         for close in close_prices.T]\n",
    "        return PPO\n",
    "\n",
    "    @staticmethod\n",
    "    def make_stochastic_oscillator(fastk_period=5, slowk_period=3, slowd_period=3, \n",
    "                                   slowk_matype=0, slowd_matype=0):                \n",
    "        class StochasticOscillator(CustomFactor):\n",
    "            \"\"\"20-day Stochastic Oscillator \"\"\"\n",
    "            inputs = [USEquityPricing.high, \n",
    "                      USEquityPricing.low, \n",
    "                      USEquityPricing.close]\n",
    "            outputs = ['slowk', 'slowd']\n",
    "            window_length = fastk_period * 2\n",
    "            \n",
    "            def compute(self, today, assets, out, high, low, close):\n",
    "                slowk, slowd = [talib.STOCH(high[:, i],\n",
    "                                            low[:, i],\n",
    "                                            close[:, i], \n",
    "                                            fastk_period=fastk_period,\n",
    "                                            slowk_period=slowk_period, \n",
    "                                            slowk_matype=slowk_matype, \n",
    "                                            slowd_period=slowd_period, \n",
    "                                            slowd_matype=slowd_matype)[-1] \n",
    "                                for i in range(len(assets))]\n",
    "\n",
    "                out.slowk[:], out.slowd[:] = slowk[-1], slowd[-1]\n",
    "        return StochasticOscillator\n",
    "    \n",
    "    @staticmethod\n",
    "    def make_trendline(timeperiod=252):                \n",
    "        class Trendline(CustomFactor):\n",
    "            inputs = [USEquityPricing.close]\n",
    "            \"\"\"52-Week Trendline\"\"\"\n",
    "            window_length = timeperiod\n",
    "\n",
    "            def compute(self, today, assets, out, close_prices):\n",
    "                out[:] = [talib.LINEARREG_SLOPE(close, \n",
    "                                   timeperiod=timeperiod)[-1] \n",
    "                          for close in close_prices.T]\n",
    "        return Trendline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "MOMENTUM_FACTORS = {\n",
    "    'Percent Above Low'            : MomentumFactors.PercentAboveLow,\n",
    "    'Percent Below High'           : MomentumFactors.PercentBelowHigh,\n",
    "    'Price Oscillator'             : MomentumFactors.make_oscillator(),\n",
    "    'Money Flow Index'             : MomentumFactors.make_mfi(),\n",
    "    'Directional Movement Index'   : MomentumFactors.make_dx(),\n",
    "    'Trendline'                    : MomentumFactors.make_trendline()\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 20.53 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 6 columns):\n",
      "Directional Movement Index    50362 non-null float64\n",
      "Money Flow Index              50362 non-null float64\n",
      "Percent Above Low             49536 non-null float64\n",
      "Percent Below High            49536 non-null float64\n",
      "Price Oscillator              50355 non-null float64\n",
      "Trendline                     49536 non-null float64\n",
      "dtypes: float64(6)\n",
      "memory usage: 2.7+ MB\n"
     ]
    }
   ],
   "source": [
    "momentum_result, t = factor_pipeline(MOMENTUM_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "momentum_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Efficiency"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class EfficiencyFactors:\n",
    "\n",
    "    @staticmethod\n",
    "    def CapexToAssets(mask):\n",
    "        \"\"\"Capital Expenditure divided by Total Assets\"\"\"\n",
    "        capex = AnnualizedData(inputs = [Fundamentals.capital_expenditure_asof_date,\n",
    "                                         Fundamentals.capital_expenditure],\n",
    "                                     mask=mask)   \n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return - capex / assets\n",
    "\n",
    "    @staticmethod\n",
    "    def CapexToSales(mask):\n",
    "        \"\"\"Capital Expenditure divided by Total Revenue\"\"\"\n",
    "        capex = AnnualizedData(inputs = [Fundamentals.capital_expenditure_asof_date,\n",
    "                                         Fundamentals.capital_expenditure],\n",
    "                                     mask=mask)   \n",
    "        revenue = AnnualizedData(inputs = [Fundamentals.total_revenue_asof_date,\n",
    "                                         Fundamentals.total_revenue],\n",
    "                                     mask=mask)         \n",
    "        return - capex / revenue\n",
    "  \n",
    "    @staticmethod\n",
    "    def CapexToFCF(mask):\n",
    "        \"\"\"Capital Expenditure divided by Free Cash Flows\"\"\"\n",
    "        capex = AnnualizedData(inputs = [Fundamentals.capital_expenditure_asof_date,\n",
    "                                         Fundamentals.capital_expenditure],\n",
    "                                     mask=mask)   \n",
    "        free_cash_flow = AnnualizedData(inputs = [Fundamentals.free_cash_flow_asof_date,\n",
    "                                         Fundamentals.free_cash_flow],\n",
    "                                     mask=mask)         \n",
    "        return - capex / free_cash_flow\n",
    "\n",
    "    @staticmethod\n",
    "    def EBITToAssets(mask):\n",
    "        \"\"\"Earnings Before Interest and Taxes (EBIT) divided by Total Assets\"\"\"\n",
    "        ebit = AnnualizedData(inputs = [Fundamentals.ebit_asof_date,\n",
    "                                         Fundamentals.ebit],\n",
    "                                     mask=mask)   \n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return ebit / assets\n",
    "    \n",
    "    @staticmethod\n",
    "    def CFOToAssets(mask):\n",
    "        \"\"\"Operating Cash Flows divided by Total Assets\"\"\"\n",
    "        cfo = AnnualizedData(inputs = [Fundamentals.operating_cash_flow_asof_date,\n",
    "                                         Fundamentals.operating_cash_flow],\n",
    "                                     mask=mask)   \n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return cfo / assets \n",
    "    \n",
    "    @staticmethod\n",
    "    def RetainedEarningsToAssets(mask):\n",
    "        \"\"\"Retained Earnings divided by Total Assets\"\"\"\n",
    "        retained_earnings = AnnualizedData(inputs = [Fundamentals.retained_earnings_asof_date,\n",
    "                                         Fundamentals.retained_earnings],\n",
    "                                     mask=mask)   \n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return retained_earnings / assets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "EFFICIENCY_FACTORS = {\n",
    "    'CFO To Assets' :EfficiencyFactors.CFOToAssets,\n",
    "    'Capex To Assets' :EfficiencyFactors.CapexToAssets,\n",
    "    'Capex To FCF' :EfficiencyFactors.CapexToFCF,\n",
    "    'Capex To Sales' :EfficiencyFactors.CapexToSales,\n",
    "    'EBIT To Assets' :EfficiencyFactors.EBITToAssets,\n",
    "    'Retained Earnings To Assets' :EfficiencyFactors.RetainedEarningsToAssets\n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 35.88 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 6 columns):\n",
      "CFO To Assets                  50351 non-null float64\n",
      "Capex To Assets                46997 non-null float64\n",
      "Capex To FCF                   45799 non-null float64\n",
      "Capex To Sales                 46997 non-null float64\n",
      "EBIT To Assets                 46635 non-null float64\n",
      "Retained Earnings To Assets    50349 non-null float64\n",
      "dtypes: float64(6)\n",
      "memory usage: 2.7+ MB\n"
     ]
    }
   ],
   "source": [
    "efficiency_result, t = factor_pipeline(EFFICIENCY_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "efficiency_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Risk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "class RiskFactors:\n",
    "\n",
    "    @staticmethod\n",
    "    def LogMarketCap(mask):\n",
    "        \"\"\"Log of Market Capitalization log(Close Price * Shares Outstanding)\"\"\"\n",
    "        return np.log(MarketCap(mask=mask))\n",
    " \n",
    "    class DownsideRisk(CustomFactor):\n",
    "        \"\"\"Mean returns divided by std of 1yr daily losses (Sortino Ratio)\"\"\"\n",
    "        inputs = [USEquityPricing.close]\n",
    "        window_length = 252\n",
    "\n",
    "        def compute(self, today, assets, out, close):\n",
    "            ret = pd.DataFrame(close).pct_change()\n",
    "            out[:] = ret.mean().div(ret.where(ret<0).std())\n",
    "\n",
    "    @staticmethod\n",
    "    def MarketBeta(**kwargs):\n",
    "        \"\"\"Slope of 1-yr regression of price returns against index returns\"\"\"\n",
    "        return SimpleBeta(target=symbols('SPY'), regression_length=252) \n",
    "\n",
    "    class DownsideBeta(CustomFactor):\n",
    "        \"\"\"Slope of 1yr regression of returns on negative index returns\"\"\"\n",
    "        inputs = [USEquityPricing.close]\n",
    "        window_length = 252\n",
    "\n",
    "        def compute(self, today, assets, out, close):\n",
    "            t = len(close)\n",
    "            assets = pd.DataFrame(close).pct_change()\n",
    "            \n",
    "            start_date = (today - pd.DateOffset(years=1)).strftime('%Y-%m-%d')\n",
    "            spy = get_pricing('SPY', \n",
    "                              start_date=start_date, \n",
    "                              end_date=today.strftime('%Y-%m-%d')).reset_index(drop=True)\n",
    "            spy_neg_ret = (spy\n",
    "                           .close_price\n",
    "                           .iloc[-t:]\n",
    "                           .pct_change()\n",
    "                           .pipe(lambda x: x.where(x<0)))\n",
    "    \n",
    "            out[:] = assets.apply(lambda x: x.cov(spy_neg_ret)).div(spy_neg_ret.var())         \n",
    "\n",
    "    class Vol3M(CustomFactor):\n",
    "        \"\"\"3-month Volatility: Standard deviation of returns over 3 months\"\"\"\n",
    "\n",
    "        inputs = [USEquityPricing.close]\n",
    "        window_length = 63\n",
    "\n",
    "        def compute(self, today, assets, out, close):\n",
    "            out[:] = np.log1p(pd.DataFrame(close).pct_change()).std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "RISK_FACTORS = {\n",
    "    'Log Market Cap' : RiskFactors.LogMarketCap,\n",
    "    'Downside Risk'  : RiskFactors.DownsideRisk,\n",
    "    'Index Beta'     : RiskFactors.MarketBeta,\n",
    "#     'Downside Beta'  : RiskFactors.DownsideBeta,    \n",
    "    'Volatility 3M'  : RiskFactors.Vol3M,    \n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 46.10 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 4 columns):\n",
      "Downside Risk     50362 non-null float64\n",
      "Index Beta        50079 non-null float64\n",
      "Log Market Cap    50362 non-null float64\n",
      "Volatility 3M     50362 non-null float64\n",
      "dtypes: float64(4)\n",
      "memory usage: 1.9+ MB\n"
     ]
    }
   ],
   "source": [
    "risk_result, t = factor_pipeline(RISK_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "risk_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Growth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def growth_pipeline():\n",
    "    revenue = AnnualizedData(inputs = [Fundamentals.total_revenue_asof_date,\n",
    "                                       Fundamentals.total_revenue],\n",
    "                             mask=UNIVERSE)\n",
    "    eps = AnnualizedData(inputs = [Fundamentals.diluted_eps_earnings_reports_asof_date,\n",
    "                                       Fundamentals.diluted_eps_earnings_reports],\n",
    "                             mask=UNIVERSE)    \n",
    "\n",
    "    return Pipeline({'Sales': revenue,\n",
    "                     'EPS': eps,\n",
    "                     'Total Assets': Fundamentals.total_assets.latest,\n",
    "                     'Net Debt': Fundamentals.net_debt.latest},\n",
    "                    screen=UNIVERSE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 22.21 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 12 columns):\n",
      "EPS                        50215 non-null float64\n",
      "Net Debt                   47413 non-null float64\n",
      "Sales                      50351 non-null float64\n",
      "Total Assets               50362 non-null float64\n",
      "EPS Growth 3M              50152 non-null float64\n",
      "EPS Growth 12M             49963 non-null float64\n",
      "Net Debt Growth 3M         47350 non-null float64\n",
      "Net Debt Growth 12M        47171 non-null float64\n",
      "Sales Growth 3M            50288 non-null float64\n",
      "Sales Growth 12M           50099 non-null float64\n",
      "Total Assets Growth 3M     50299 non-null float64\n",
      "Total Assets Growth 12M    50110 non-null float64\n",
      "dtypes: float64(12)\n",
      "memory usage: 5.0+ MB\n"
     ]
    }
   ],
   "source": [
    "start_timer = time()\n",
    "growth_result = run_pipeline(growth_pipeline(), start_date=START, end_date=END)\n",
    "\n",
    "for col in growth_result.columns:\n",
    "    for month in [3, 12]:\n",
    "        new_col = col + ' Growth {}M'.format(month)\n",
    "        kwargs = {new_col: growth_result[col].pct_change(month*MONTH).groupby(level=1).rank()}        \n",
    "        growth_result = growth_result.assign(**kwargs)\n",
    "print('Pipeline run time {:.2f} secs'.format(time() - start_timer))\n",
    "growth_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Quality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "class QualityFactors:\n",
    "    \n",
    "    @staticmethod\n",
    "    def AssetTurnover(mask):\n",
    "        \"\"\"Sales divided by average of year beginning and year end assets\"\"\"\n",
    "\n",
    "        assets = AnnualAvg(inputs=[Fundamentals.total_assets],\n",
    "                           mask=mask)\n",
    "        sales = AnnualizedData([Fundamentals.total_revenue_asof_date,\n",
    "                                Fundamentals.total_revenue], mask=mask)\n",
    "        return sales / assets\n",
    "  \n",
    "    @staticmethod\n",
    "    def CurrentRatio(mask):\n",
    "        \"\"\"Total current assets divided by total current liabilities\"\"\"\n",
    "\n",
    "        assets = Fundamentals.current_assets.latest\n",
    "        liabilities = Fundamentals.current_liabilities.latest\n",
    "        return assets / liabilities\n",
    "    \n",
    "    @staticmethod\n",
    "    def AssetToEquityRatio(mask):\n",
    "        \"\"\"Total current assets divided by common equity\"\"\"\n",
    "\n",
    "        assets = Fundamentals.current_assets.latest\n",
    "        equity = Fundamentals.common_stock.latest\n",
    "        return assets / equity    \n",
    "\n",
    "    \n",
    "    @staticmethod\n",
    "    def InterestCoverage(mask):\n",
    "        \"\"\"EBIT divided by interest expense\"\"\"\n",
    "\n",
    "        ebit = AnnualizedData(inputs = [Fundamentals.ebit_asof_date,\n",
    "                                        Fundamentals.ebit], mask=mask)  \n",
    "        \n",
    "        interest_expense = AnnualizedData(inputs = [Fundamentals.interest_expense_asof_date,\n",
    "                                        Fundamentals.interest_expense], mask=mask)\n",
    "        return ebit / interest_expense\n",
    "\n",
    "    @staticmethod\n",
    "    def DebtToAssetRatio(mask):\n",
    "        \"\"\"Total Debts divided by Total Assets\"\"\"\n",
    "\n",
    "        debt = Fundamentals.total_debt.latest\n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return debt / assets\n",
    "    \n",
    "    @staticmethod\n",
    "    def DebtToEquityRatio(mask):\n",
    "        \"\"\"Total Debts divided by Common Stock Equity\"\"\"\n",
    "\n",
    "        debt = Fundamentals.total_debt.latest\n",
    "        equity = Fundamentals.common_stock.latest\n",
    "        return debt / equity    \n",
    "\n",
    "    @staticmethod\n",
    "    def WorkingCapitalToAssets(mask):\n",
    "        \"\"\"Current Assets less Current liabilities (Working Capital) divided by Assets\"\"\"\n",
    "\n",
    "        working_capital = Fundamentals.working_capital.latest\n",
    "        assets = Fundamentals.total_assets.latest\n",
    "        return working_capital / assets\n",
    " \n",
    "    @staticmethod\n",
    "    def WorkingCapitalToSales(mask):\n",
    "        \"\"\"Current Assets less Current liabilities (Working Capital), divided by Sales\"\"\"\n",
    "\n",
    "        working_capital = Fundamentals.working_capital.latest\n",
    "        sales = AnnualizedData([Fundamentals.total_revenue_asof_date,\n",
    "                                Fundamentals.total_revenue], mask=mask)        \n",
    "        return working_capital / sales          \n",
    "       \n",
    "        \n",
    "    class MertonsDD(CustomFactor):\n",
    "        \"\"\"Merton's Distance to Default \"\"\"\n",
    "        \n",
    "        inputs = [Fundamentals.total_assets,\n",
    "                  Fundamentals.total_liabilities, \n",
    "                  libor.value, \n",
    "                  USEquityPricing.close]\n",
    "        window_length = 252\n",
    "\n",
    "        def compute(self, today, assets, out, tot_assets, tot_liabilities, r, close):\n",
    "            mertons = []\n",
    "\n",
    "            for col_assets, col_liabilities, col_r, col_close in zip(tot_assets.T, tot_liabilities.T,\n",
    "                                                                     r.T, close.T):\n",
    "                vol_1y = np.nanstd(col_close)\n",
    "                numerator = np.log(\n",
    "                        col_assets[-1] / col_liabilities[-1]) + ((252 * col_r[-1]) - ((vol_1y ** 2) / 2))\n",
    "                mertons.append(numerator / vol_1y)\n",
    "\n",
    "            out[:] = mertons            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "QUALITY_FACTORS = {\n",
    "    'AssetToEquityRatio'    : QualityFactors.AssetToEquityRatio,\n",
    "    'AssetTurnover'         : QualityFactors.AssetTurnover,\n",
    "    'CurrentRatio'          : QualityFactors.CurrentRatio,\n",
    "    'DebtToAssetRatio'      : QualityFactors.DebtToAssetRatio,\n",
    "    'DebtToEquityRatio'     : QualityFactors.DebtToEquityRatio,\n",
    "    'InterestCoverage'      : QualityFactors.InterestCoverage,\n",
    "    'MertonsDD'             : QualityFactors.MertonsDD,\n",
    "    'WorkingCapitalToAssets': QualityFactors.WorkingCapitalToAssets,\n",
    "    'WorkingCapitalToSales' : QualityFactors.WorkingCapitalToSales,\n",
    "}\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 34.41 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 9 columns):\n",
      "AssetToEquityRatio        45176 non-null float64\n",
      "AssetTurnover             50314 non-null float64\n",
      "CurrentRatio              45680 non-null float64\n",
      "DebtToAssetRatio          50080 non-null float64\n",
      "DebtToEquityRatio         48492 non-null float64\n",
      "InterestCoverage          35250 non-null float64\n",
      "MertonsDD                 50362 non-null float64\n",
      "WorkingCapitalToAssets    45680 non-null float64\n",
      "WorkingCapitalToSales     45669 non-null float64\n",
      "dtypes: float64(9)\n",
      "memory usage: 3.8+ MB\n"
     ]
    }
   ],
   "source": [
    "quality_result, t = factor_pipeline(QUALITY_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "quality_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Payout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "class PayoutFactors:\n",
    "\n",
    "    @staticmethod\n",
    "    def DividendPayoutRatio(mask):\n",
    "        \"\"\"Dividends Per Share divided by Earnings Per Share\"\"\"\n",
    "\n",
    "        dps = AnnualizedData(inputs = [Fundamentals.dividend_per_share_earnings_reports_asof_date,\n",
    "                                        Fundamentals.dividend_per_share_earnings_reports], mask=mask)  \n",
    "        \n",
    "        eps = AnnualizedData(inputs = [Fundamentals.basic_eps_earnings_reports_asof_date,\n",
    "                                        Fundamentals.basic_eps_earnings_reports], mask=mask)\n",
    "        return dps / eps\n",
    "    \n",
    "    @staticmethod\n",
    "    def DividendGrowth(**kwargs):\n",
    "        \"\"\"Annualized percentage DPS change\"\"\"        \n",
    "        return Fundamentals.dps_growth.latest    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "PAYOUT_FACTORS = {\n",
    "    'Dividend Payout Ratio': PayoutFactors.DividendPayoutRatio,\n",
    "    'Dividend Growth': PayoutFactors.DividendGrowth\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 21.85 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 2 columns):\n",
      "Dividend Growth          40517 non-null float64\n",
      "Dividend Payout Ratio    39947 non-null float64\n",
      "dtypes: float64(2)\n",
      "memory usage: 1.2+ MB\n"
     ]
    }
   ],
   "source": [
    "payout_result, t = factor_pipeline(PAYOUT_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "payout_result.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Profitability"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ProfitabilityFactors:\n",
    "    \n",
    "    @staticmethod\n",
    "    def GrossProfitMargin(mask):\n",
    "        \"\"\"Gross Profit divided by Net Sales\"\"\"\n",
    "\n",
    "        gross_profit = AnnualizedData([Fundamentals.gross_profit_asof_date,\n",
    "                              Fundamentals.gross_profit], mask=mask)  \n",
    "        sales = AnnualizedData([Fundamentals.total_revenue_asof_date,\n",
    "                                Fundamentals.total_revenue], mask=mask)\n",
    "        return gross_profit / sales   \n",
    "    \n",
    "    @staticmethod\n",
    "    def NetIncomeMargin(mask):\n",
    "        \"\"\"Net income divided by Net Sales\"\"\"\n",
    "\n",
    "        net_income = AnnualizedData([Fundamentals.net_income_income_statement_asof_date,\n",
    "                              Fundamentals.net_income_income_statement], mask=mask)  \n",
    "        sales = AnnualizedData([Fundamentals.total_revenue_asof_date,\n",
    "                                Fundamentals.total_revenue], mask=mask)\n",
    "        return net_income / sales   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "PROFITABIILTY_FACTORS = {\n",
    "    'Gross Profit Margin': ProfitabilityFactors.GrossProfitMargin,\n",
    "    'Net Income Margin': ProfitabilityFactors.NetIncomeMargin,\n",
    "    'Return on Equity': Fundamentals.roe.latest,\n",
    "    'Return on Assets': Fundamentals.roa.latest,\n",
    "    'Return on Invested Capital': Fundamentals.roic.latest\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pipeline run time 21.65 secs\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 50362 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 2 columns):\n",
      "Dividend Growth          40517 non-null float64\n",
      "Dividend Payout Ratio    39947 non-null float64\n",
      "dtypes: float64(2)\n",
      "memory usage: 1.2+ MB\n"
     ]
    }
   ],
   "source": [
    "profitability_result, t = factor_pipeline(PAYOUT_FACTORS)\n",
    "print('Pipeline run time {:.2f} secs'.format(t))\n",
    "payout_result.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# profitability_pipeline().show_graph(format='png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get Returns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lookahead = [1, 5, 10, 20]\n",
    "returns = run_pipeline(Pipeline({'Returns{}D'.format(i): Returns(inputs=[USEquityPricing.close], \n",
    "                                          window_length=i+1, mask=UNIVERSE) for i in lookahead},\n",
    "                                screen=UNIVERSE),\n",
    "                       start_date=START, \n",
    "                       end_date=END)\n",
    "return_cols = ['Returns{}D'.format(i) for i in lookahead]\n",
    "returns.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.concat([returns,\n",
    "                 value_result,\n",
    "                 momentum_result,\n",
    "                 quality_result,\n",
    "                 payout_result,\n",
    "                 growth_result,\n",
    "                 efficiency_result,\n",
    "                 risk_result], axis=1).sortlevel()\n",
    "data.index.names = ['date', 'asset']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['stock'] = data.index.get_level_values('asset').map(lambda x: x.asset_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Remove columns and rows with less than 80% of data availability"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2,985 rows and 3 columns dropped\n"
     ]
    }
   ],
   "source": [
    "rows_before, cols_before = data.shape\n",
    "data = (data\n",
    "        .dropna(axis=1, thresh=int(len(data)*.8))\n",
    "        .dropna(thresh=int(len(data.columns) * .8)))\n",
    "data = data.fillna(data.median())\n",
    "rows_after, cols_after = data.shape\n",
    "print('{:,d} rows and {:,d} columns dropped'.format(rows_before-rows_after, cols_before-cols_after))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 47377 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 52 columns):\n",
      "AssetToEquityRatio             47377 non-null float64\n",
      "AssetTurnover                  47377 non-null float64\n",
      "CFO To Assets                  47377 non-null float64\n",
      "Capex To Assets                47377 non-null float64\n",
      "Capex To FCF                   47377 non-null float64\n",
      "Capex To Sales                 47377 non-null float64\n",
      "CurrentRatio                   47377 non-null float64\n",
      "DebtToAssetRatio               47377 non-null float64\n",
      "DebtToEquityRatio              47377 non-null float64\n",
      "Directional Movement Index     47377 non-null float64\n",
      "Dividend Growth                47377 non-null float64\n",
      "DividendYield                  47377 non-null float64\n",
      "Downside Risk                  47377 non-null float64\n",
      "EBIT To Assets                 47377 non-null float64\n",
      "EBITDAYield                    47377 non-null float64\n",
      "EPS                            47377 non-null float64\n",
      "EPS Growth 12M                 47377 non-null float64\n",
      "EPS Growth 3M                  47377 non-null float64\n",
      "EVToEBITDA                     47377 non-null float64\n",
      "EVToFCF                        47377 non-null float64\n",
      "Index Beta                     47377 non-null float64\n",
      "Log Market Cap                 47377 non-null float64\n",
      "MertonsDD                      47377 non-null float64\n",
      "Money Flow Index               47377 non-null float64\n",
      "Net Debt                       47377 non-null float64\n",
      "Net Debt Growth 12M            47377 non-null float64\n",
      "Net Debt Growth 3M             47377 non-null float64\n",
      "Percent Above Low              47377 non-null float64\n",
      "Percent Below High             47377 non-null float64\n",
      "Price Oscillator               47377 non-null float64\n",
      "PriceToBook                    47377 non-null float64\n",
      "PriceToDilutedEarningsTTM      47377 non-null float64\n",
      "PriceToEarningsTTM             47377 non-null float64\n",
      "PriceToFCF                     47377 non-null float64\n",
      "PriceToOperatingCashflow       47377 non-null float64\n",
      "PriceToSalesTTM                47377 non-null float64\n",
      "Retained Earnings To Assets    47377 non-null float64\n",
      "Returns10D                     47377 non-null float64\n",
      "Returns1D                      47377 non-null float64\n",
      "Returns20D                     47377 non-null float64\n",
      "Returns5D                      47377 non-null float64\n",
      "Sales                          47377 non-null float64\n",
      "Sales Growth 12M               47377 non-null float64\n",
      "Sales Growth 3M                47377 non-null float64\n",
      "Total Assets                   47377 non-null float64\n",
      "Total Assets Growth 12M        47377 non-null float64\n",
      "Total Assets Growth 3M         47377 non-null float64\n",
      "Trendline                      47377 non-null float64\n",
      "Volatility 3M                  47377 non-null float64\n",
      "WorkingCapitalToAssets         47377 non-null float64\n",
      "WorkingCapitalToSales          47377 non-null float64\n",
      "stock                          47377 non-null object\n",
      "dtypes: float64(51), object(1)\n",
      "memory usage: 19.2+ MB\n"
     ]
    }
   ],
   "source": [
    "data.sort_index(1).info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f241dc5ad10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.clustermap(data.drop(['stock'] + return_cols, axis=1).corr())\n",
    "plt.gcf().set_size_inches((14,14));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Prepare Features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 47377 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Columns: 182 entries, DividendYield to stock_YELP INC\n",
      "dtypes: float64(182)\n",
      "memory usage: 66.1+ MB\n"
     ]
    }
   ],
   "source": [
    "X = pd.get_dummies(data.drop(return_cols, axis=1), drop_first=True)\n",
    "X.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Shifted Returns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 47377 entries, (2014-01-02 00:00:00+00:00, Equity(24 [AAPL])) to (2015-12-31 00:00:00+00:00, Equity(47208 [GPRO]))\n",
      "Data columns (total 4 columns):\n",
      "Returns1D     47242 non-null float64\n",
      "Returns5D     46706 non-null float64\n",
      "Returns10D    46036 non-null float64\n",
      "Returns20D    44696 non-null float64\n",
      "dtypes: float64(4)\n",
      "memory usage: 1.8+ MB\n"
     ]
    }
   ],
   "source": [
    "y = data.loc[:, return_cols]\n",
    "shifted_y = []\n",
    "for col in y.columns:\n",
    "    t = int(re.search(r'\\d+', col).group(0))\n",
    "    shifted_y.append(y.groupby(level='asset')['Returns{}D'.format(t)].shift(-t).to_frame(col))\n",
    "y = pd.concat(shifted_y, axis=1)\n",
    "y.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAHrCAYAAAAdcAiZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VPWZx/HvZJIACZckSMIKRRS32JJRMQpi8AZZESpN\ntxWEyM0grootLegqYFFfC4ZSU3VlFzcKK6JjKiqloUBULLrcaagwwypuMSByC0EEkhCTMLN/pBkm\nycltCDnnMJ/3X88wk5knkMPkO8/v/I7D7/f7BQAAAAA2FmF2AwAAAABwvgg2AAAAAGyPYAMAAADA\n9gg2AAAAAGyPYAMAAADA9gg2AAAAAGyPYAMAF5GrrrpKw4YN04gRIzR8+HANGzZMTz75pMrLy5v8\n2g0bNujIkSMXrLeFCxfqhhtu0IgRIzR06FCNGDFCCxcuVEVFhSTp6NGjGjlyZKPPUVFRoT/84Q8N\n3j9ixAh98803jT7H+PHjlZeXZ3jf6tWrVVpaKkl6/PHHtX79+kafCwBgHQQbALiIOBwOLVu2TKtX\nr9aaNWu0atUqffvtt3r55Zeb/NrXXntNBw8evKD93XnnnVq9erXWrVunZcuW6YsvvtDDDz8sSUpK\nSmowcNT43//9X61cubLB+1evXq2EhISQ+3vppZdUUlIiSfrNb36j2267LeTnAgC0LYINAFxE/H6/\ngq+7HBUVpZtvvlmff/65pOqJx9y5czVs2DANHTpUOTk5kqQXX3xRW7Zs0WOPPaY1a9Zo5syZtcJQ\n8O0hQ4boP/7jPzR8+HAdOXJE48eP12uvvaaMjAzdcsstmjFjRrN67dq1q55//nkVFhZq06ZNOnjw\noPr16yepenozadIk3XXXXbrjjjv0wgsv6Pjx43rkkUf06aefaty4cZKqJ1Q5OTkaPny4fD6frrrq\nKh09elQrVqzQfffdF3iturf37NmjUaNG6fbbb9ecOXPk8/k0a9YsFRYWasKECSooKKg12dm6dat+\n+tOfasSIEbrnnnu0e/fuwPNOmzZNs2fP1rBhw3TXXXdp7969kqRt27bppz/9qe666y796Ec/0tq1\na1vwLwkAaCmCDQBcxE6ePKlVq1bpuuuukyS98sor+vLLL/WnP/1Jf/rTn7R27Vp9/PHHmjZtmhIT\nE5Wdna3hw4c3+bxHjx7VmjVr1L17d0nSn//8Z7322mvKz8/Xli1b9Ne//rVZ/TmdTt1yyy3aunWr\npOqJkyQtXbpUN9xwg1atWqW8vDwdOHBAfr9fM2bMUP/+/fXGG2/Uep41a9YoIiIi8PXBz2V0e9u2\nbXrzzTe1Zs0abd26VevXr9ezzz4rSVq2bJlSUlICjy0rK9Mvf/lLzZkzR6tXr9bkyZM1ffr0wP2f\nfPKJxo0bp/z8fA0YMEBLly6VJC1YsECzZs3SqlWrtGjRIn344YfN+jsBAISGYAMAF5kJEyZoxIgR\nSktLU1pamm666Sbdf//9kqT169crIyNDkZGRat++vdLT0/X+++8HvjZ42tOY22+/vdbtYcOGKTo6\nWh06dFDv3r11+PDhZvfbsWNHnT59utafde3aVRs2bFBBQYGioqKUnZ2tSy65xPDrg5eLNbf/mn7b\nt2+v2267TZ9++mmDz7Fz5079wz/8g6699lpJ0h133KFvv/1WX3/9tSTpyiuv1A9+8ANJ0g9/+EMd\nOnQo8D384Q9/0JdffqlevXrpueeea1ZvAIDQEGwA4CJTc47N8uXLFRERoeHDhysiovq/+1OnTunZ\nZ58NbC6wbNmyZm0sUFeXLl1q3e7UqVOgjoiI0NmzZ5v9XAcPHqx3Xsx9992nIUOG6JlnnlFqaqoW\nLlzY7F6aI/j1OnXqpJMnTzb42BMnTqhz5861/qxTp06BTQqCv3en0ymfzydJysrKUvv27XXfffdp\n2LBhys/Pb3GfAIDmizS7AQBA66qZOMTHx2v8+PFasGCB/vM//1OSlJiYqPvvv1+33npro89RN5w0\n9ov/+Th9+rQ2bdqkiRMn1nv9KVOmaMqUKdq/f7/uv//+WsvDGlKz3Kyp/oNvnzx5UnFxcQ0+Z9eu\nXXXixIl6X9+1a9fA+TRGEhIS9OSTT+rJJ5/Uxo0b9cgjj+iWW25Rhw4dmvw+AAAtx8QGAC5i9913\nnz799FP95S9/kSQNHTpUb7/9tnw+n/x+vxYtWqQNGzZIqt5ooGZJWLdu3bRnzx5J0oEDB1RQUNDq\nvX3zzTd67LHHdOONN+qaa66pdd+cOXO0adMmSVLPnj3VrVs3SVJkZGS9ZWvBakJdYmKiCgsLVVFR\noTNnztSblrz//vuqqKhQWVmZPvnkE11//fUNPv/VV1+t48ePa+fOnZKkVatWqXv37urRo0eDfVRV\nVWn8+PE6duyYpOolatHR0YHJGQCg9TGxAYCLSN0T5mNjYzVlyhT95je/0fLly3Xvvffq4MGD+tGP\n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\nEd6scixs27ZN06ZN0z/+4z/K7/erb9++evLJJzkWcEFZ5edfMn4vOHLkiB577DH5/X5169ZNCxYs\nUFRUlIYMGaJLL71UDodDPp9PI0aMCHwNECorHQ8LFizQjh07dPbsWT3wwAP6p3/6J46HNsLExqau\nuOIKvf7661q2bJlyc3NVWVmpvLw8w8fu3r1bGzZsaPUezpw5o7lz52rQoEH17pswYYJef/11ud1u\nDRw4UA899FCrvz4gWeNYkKQBAwYE+njyyScDf86xgAvJCj//Db0XvPjiixo/frzeeOMN9erVS+++\n+64kyeFw6NVXX9WyZcuUk5OjDRs2KDc3t9X7QvixwvGwdetW7d27V7m5uXrllVf07LPPSuJ4aCsE\nm4vE1Vdfrf379+vNN9/U2LFjNW7cOL322muSpH/7t3/T2rVrtXz5cs2cOVMff/yxJGn9+vWaOXOm\nDh48qLFjx2rKlClav3697rjjDi1evFjjxo3TPffco7KyMh0+fFjjxo3TxIkTNW7cOB0+fFjt2rXT\nq6++qsTExEZ7++d//mfFxsZq586dF/qvATDlWJCk5mwwybGAC81K7wXbtm3T7bffLkm6/fbbtWnT\nJknVx0rN8RIbG6unn35aS5cubaO/IYQTM46HAQMG6MUXX5Qkde7cWWfOnJHP5+N4aCMEG5sK/iWq\nsrJS69atU+fOnZWfn6+33npLb7zxhtauXasjR45o8uTJGj58uEaNGtXg833++efKzs7Wbbfdpqqq\nKl155ZV644031LNnT23evFn5+flKTU3V0qVLNXv2bB07dkwRERGKjo5uVr/9+vXT3/72t/P+voG6\nrHAsSNLevXv18MMP69577w28YRnhWEBrssLPf0PvBeXl5YqKipIkde3aNXCs1JWUlKSSkhL5fL7z\n/NtAuLPC8eBwONS+fXtJ0vLly3XbbbcpIiJCZ86c4XhoA5xjY1OFhYWaMGGC/H6/vvjiC02ZMkXd\nunXT/v37A39eVlamr7/+ulnP16tXL3Xu3DlwOyUlRZKUmJio06dPa/DgwZo6dapOnTqlYcOG6dpr\nr21Rv6WlpXI6nS36GqA5rHAsHD16VI888oiGDx+uAwcOaMKECfrggw8Mn59jAa3JCj//zdHURPPM\nmTOKiOCzVpwfKx0PH374od577z0tWbJEkmqd58PxcOEQbGyqZh2pJE2bNk29e/eWJN1222165pln\naj32wIEDhs9RVVUVqGs+RahR9xevK6+8Un/84x+1YcMG/e53v9PPfvYzpaenN7tfr9er0aNHN/vx\nQHNZ5VgYPny4JOl73/ueLrnkEh09etTwtTgW0Jqs8vNvJCYmRhUVFYqOjtbRo0cbXLa8d+9e9erV\nq+FvEmgmqxwP//M//6OcnBwtXrxYsbGxkjge2gpx0KaC0/5jjz2m5557Tv369dOWLVtUXl4uv9+v\nefPmqaKiQg6HQ2fPnpUkdezYUUVFRZKkgoICw+czsnr1au3Zs0dDhw7VtGnT5PV6m93r73//e8XH\nx6tv374t+RaBZrHCsZCXlxf4VO7YsWM6fvy4kpKS6n0txwJamxV+/hsyaNAg5efnS5Ly8/N1yy23\n1HtMaWmpnn32WT344IPN/6aBBljheCgpKdFvf/tbvfzyy+rUqVPgsRwPbYOJjU0FjzR79uypYcOG\nKTc3N7DVZmRkpIYOHaro6Gj169dP2dnZ6t69u37yk59oxowZev/99/WDH/zA8PmM6t69e+upp55S\nTEyMIiMjNXv2bO3evVvz58/XoUOHFBkZqfz8fC1cuFCS9Prrrys/P1+nT59W7969lZWVdaH/ShCm\nrHAsJCUlacaMGVq3bp2qqqr0zDPPKDKy+r9XjgVcSFb4+W/oveDnP/+5Hn/8cf3+97/XpZdeqp/8\n5CeB55oyZYr8fr9Onz6tu+++W3fccceF/qtCGLDC8bB69Wp9++23+uUvfym/3y+Hw6EFCxZwPLQR\nh785W/kAAAAAgIWxFA0AAACA7RFsAAAAANgewQYAAACA7RFsAAAAANgewQYAAACA7RFsAAAAANge\nwQYAAACA7f0/9mHOqH2g4isAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f241d338590>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.boxplot(y[return_cols])\n",
    "ax.set_title('Return Distriubtions');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TA-Lib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Technical:\n",
    "    @staticmethod\n",
    "    def make_bbands(timeperiod=5, nbdevup=2, nbdevdn=2, matype=0):\n",
    "        class BBANDS(CustomFactor):\n",
    "            \"\"\"Lower, middle, and upper Bollinger Bands\"\"\"\n",
    "\n",
    "            inputs = [USEquityPricing.close]\n",
    "            outputs = ['upper', 'middle', 'lower']\n",
    "            window_length = timeperiod\n",
    "\n",
    "            def compute(self, today, assets, out, close_prices):\n",
    "                bb = []\n",
    "                for close in close_prices.T:\n",
    "                    u, m, l = talib.BBANDS(close, timeperiod=timeperiod, \n",
    "                                nbdevup=nbdevup, nbdevdn=nbdevdn, \n",
    "                                matype=matype)\n",
    "                    bb.append((u[-1], m[-1], l[-1]))\n",
    "                out.upper[:], out.middle[:], out.lower[:] = list(zip(*bb))\n",
    "        return BBANDS\n",
    "    \n",
    "    @staticmethod\n",
    "    def make_ema(timeperiod=30):\n",
    "        class EMA(CustomFactor):\n",
    "            \"\"\"Double Exponential Moving Average\"\"\"\n",
    "            inputs = [USEquityPricing.close]\n",
    "            window_length = timeperiod\n",
    "            \n",
    "            def compute(self, today, assets, out, close_prices):\n",
    "                out[:] = [talib.EMA(p, timeperiod=timeperiod)[-1] for p in close_prices.T]\n",
    "        return EMA \n",
    "    \n",
    "    @staticmethod\n",
    "    def make_dx(timeperiod=14):\n",
    "        class DX(CustomFactor):\n",
    "            \"\"\"Directional Movement Index\"\"\"\n",
    "            inputs = [USEquityPricing.high, \n",
    "                      USEquityPricing.low, \n",
    "                      USEquityPricing.close]\n",
    "            window_length = timeperiod + 1\n",
    "            \n",
    "            def compute(self, today, assets, out, high, low, close):\n",
    "                out[:] = [talib.DX(high[:, i], \n",
    "                                   low[:, i], \n",
    "                                   close[:, i], \n",
    "                                   timeperiod=timeperiod)[-1] \n",
    "                          for i in range(len(assets))]\n",
    "        return DX  \n",
    "    \n",
    "    \n",
    "    @staticmethod\n",
    "    def make_mfi(timeperiod=14):\n",
    "        class MFI(CustomFactor):\n",
    "            \"\"\"Money Flow Index\"\"\"\n",
    "            inputs = [USEquityPricing.high, \n",
    "                      USEquityPricing.low, \n",
    "                      USEquityPricing.close,\n",
    "                      USEquityPricing.volume]\n",
    "            window_length = timeperiod + 1\n",
    "            \n",
    "            def compute(self, today, assets, out, high, low, close, vol):\n",
    "                out[:] = [talib.MFI(high[:, i], \n",
    "                                    low[:, i], \n",
    "                                    close[:, i],\n",
    "                                    vol[:, i],\n",
    "                                    timeperiod=timeperiod)[-1] \n",
    "                          for i in range(len(assets))]\n",
    "        return MFI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test_pipeline():\n",
    "    stocks = StaticAssets(symbols(['MSFT', 'AAPL']))\n",
    "#     DX = Technical.make_dx()\n",
    "    MFI = Technical.make_mfi()\n",
    "    \n",
    "    ewma = EWMA(inputs=[USEquityPricing.high],\n",
    "                        window_length=30, \n",
    "                        decay_rate=.2,\n",
    "                        mask=stocks)\n",
    "    bb = BollingerBands(window_length=30, k=2, mask=stocks)\n",
    "    return Pipeline({'adx': Technical.make_dx()(mask=stocks),\n",
    "                     'mfi': MFI(mask=stocks),\n",
    "                     'ewma': ewma,\n",
    "                     'lower': bb.lower,\n",
    "                     'mid': bb.middle,\n",
    "                     'up': bb.upper},\n",
    "                    screen=stocks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "start_timer = time()\n",
    "result = run_pipeline(test_pipeline(), \n",
    "                      start_date='2018-05-01',\n",
    "                      end_date='2018-07-31')\n",
    "print('Pipeline run time {:.2f} secs'.format(time() - start_timer))\n",
    "result.tail(10)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "254.391px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
